using System;
using Kaleida.ServiceMonitor.Framework;
using Kaleida.ServiceMonitor.Framework.Responses;

namespace Kaleida.ServiceMonitor.Operations.ResponseHandlers
{
    public class MustContain : ResponseHandler
    {
        private readonly string expectedContent;

        public MustContain(string expectedContent)
        {
            this.expectedContent = ReplaceSpecialCharacters(expectedContent);
        }

        public override string Description
        {
            get { return string.Format("expect the response to contain '{0}'", expectedContent); }
        }

        private static string ReplaceSpecialCharacters(string expectedResponseFragment)
        {
            return expectedResponseFragment.Replace(@"\r", "\r").Replace(@"\n", "\n");
        }

        public override string ProcessResponse(object response)
        {
            var httpResponse = (IStringContainer)response;
            var content = httpResponse.Content;

            if (!content.Contains(expectedContent))
                throw new InvalidOperationException(string.Format("Expected response to contain '{0}' but text wasn't found", expectedContent));

            return string.Format("Found string within document of length {0} characters", content.Length);
        }
    }
}